Load/Save File added.
[f432xdd.git] / java / Graph Editor / src / interfaces / GraphPanel.java
blob8174d843498f750169bcadefd87d3901c01ffed4
1 package interfaces;
2 import java.awt.Color;
3 import java.awt.FontMetrics;
4 import java.awt.Graphics;
5 import java.util.Observable;
6 import java.util.Observer;
8 import javax.swing.*;
10 import controllers.SelectionController;
11 import models.GraphEdge;
12 import models.GraphModel;
13 import models.GraphVertex;
15 public class GraphPanel extends JPanel implements Observer{
16 private static final long serialVersionUID = 1388592199136335514L;
17 private GraphModel model;
18 private SelectionController selectionController;
20 public GraphPanel(GraphModel model){
21 this.setSize(500, 400);
22 this.setBackground(Color.BLUE);
23 this.model = model;
25 GraphVertex a = new GraphVertex();
26 GraphVertex b = new GraphVertex();
27 GraphVertex c = new GraphVertex();
29 GraphEdge edge1 = new GraphEdge(new GraphVertex[] {a,b});
30 GraphEdge edge2 = new GraphEdge(new GraphVertex[] {b,c});
31 GraphEdge edge3 = new GraphEdge(new GraphVertex[] {c,a});
33 model.addGraph(a,b,c);
34 model.addEdge(edge1,edge2,edge3);
35 model.addObserver(this);
38 public void setSelectionController(SelectionController controller)
40 this.selectionController = controller;
43 public void setModel(GraphModel model){
44 if(this.model != null){
45 this.model.deleteObserver(this);
47 this.model = model;
48 model.addObserver(this);
49 selectionController.setModel(model);
52 public void addNode()
54 addNode(new GraphVertex());
56 public void addNode(GraphVertex o)
58 model.addGraph(o);
61 public GraphVertex deleteSelectedNode()
63 GraphVertex o = selectionController.getSelectedVertex();
64 deleteNode(o);
65 return o;
68 public void deleteNode(GraphVertex o)
70 model.removeGraph(o);
71 selectionController.removeSelected();
74 public GraphModel getModel(){
75 return model;
78 public int getDrawTextWidth(String in)
80 FontMetrics fm = this.getFontMetrics(this.getFont());
81 int width = fm.stringWidth(in);
82 return width;
86 public void paintComponent(Graphics g)
88 System.out.println("paintComponent");
89 g.setColor(this.getBackground());
90 g.fillRect(0, 0, getWidth(), getHeight());
93 GraphEdge[] edges = model.getEdges();
94 g.setColor(Color.cyan);
95 for(int i=0; i < edges.length; i++){
96 GraphEdge edge = edges[i];
97 GraphVertex[] vertexes = edge.getNodes();
98 g.drawLine(vertexes[0].getX() + (vertexes[0].getWidth()/2),
99 vertexes[0].getY() + (vertexes[0].getHeight()/2),
100 vertexes[1].getX() + (vertexes[1].getWidth()/2),
101 vertexes[1].getY() + (vertexes[0].getHeight()/2));
104 // Draw Adding vertex line if needed
105 if(this.selectionController != null && this.selectionController.isAddingEdge()){
107 g.setColor(Color.red);
108 GraphVertex origen = this.selectionController.getSelectedVertex();
109 g.drawLine( origen.getX() + (origen.getWidth()/2),
110 origen.getY() + (origen.getHeight()/2),
111 selectionController.getMouseX(),selectionController.getMouseY());
114 GraphVertex[] objects = model.getVertexes();
115 for(int i=0; i < objects.length; i++){
116 GraphVertex o = objects[i];
117 g.setColor(Color.white);
118 g.fillRect(o.getX(), o.getY(), o.getWidth(), o.getHeight());
119 if(o.isSelected()){
120 g.setColor(Color.red);
121 }else{
122 g.setColor(Color.black);
124 g.drawRect(o.getX(), o.getY(),o.getWidth(), o.getHeight());
125 g.setColor(Color.black);
126 g.drawString(o.getName(), o.getX()+10, o.getY()+25);
131 @Override
132 public void update(Observable arg0, Object arg1) {
133 if(arg0 == model){
134 System.out.println("Refresh @ graphpanel" + arg0.toString());
135 repaint();
136 }else{
137 System.out.println("FOUT: onbekend object riep GraphPanel.update aan: " + arg0.toString());